package api

import (
	"fmt"
	"time"
)

func init() {
	fmt.Println("初始化api模块成功……")
}

func Welcome() {
	fmt.Println("欢迎陈文小超来到今日的golang语言学习，现在的时间是：", time.Now().Unix())
}

type myFunc func(float32, float32, byte) float32

// FunctionModule 函数练习
func FunctionModule() {
	// 函数基本语法
	/*
		func name (形参列表) （返回值列表）{
			函数体……
			return 返回值列表
		}
	*/

	// 四则运算
	var n1 float32 = 100.00256
	var n2 float32 = 50
	res := calc(n1, n2, '/')
	fmt.Printf("计算结果是：%.2f\n", res)
	// 返回多个数值
	sum, sub := sumAndSub(n1, n2, '-')
	fmt.Printf("计算结果是：%.2f,%.2f\n", sum, sub)
	fmt.Println("-----------")

	// 斐波那契切数列
	var n int = 1
	fbnq := fbnq(n)
	fmt.Printf("%v的斐波那契数列是：%v", n, fbnq)

	// 猴子吃桃
	peach := monkey(1)
	fmt.Printf("猴子第一天吃的桃子数：%v\n", peach)

	// 类型别名
}

// 类型别名
func typeAlias(myFunc1 myFunc, n1 float32, n2 float32, operator byte) (float32, float32) {
	// return myFunc(sumAndSub, n1, n2, operator)
	return 0.00,0.010
}

// monkey 猴子吃桃
func monkey(day int) int {
	if day > 10 || day < 1 {
		fmt.Println("输入的天数有问题……")
		return 0
	}
	if day == 10 {
		return 1
	} else {
		return (monkey(day+1) + 1) * 2
	}
}

// 斐波那契数列
func fbnq(n int) int {
	if n == 1 || n == 2 {
		return n
	} else {
		n--
		return fbnq(n) + fbnq(n-1)
	}
}

// 加减乘除
func calc(f1 float32, f2 float32, operator byte) float32 {
	var result float32
	switch operator {
	case '+':
		result = f1 + f2
	case '-':
		result = f1 - f2
	case '*':
		result = f1 * f2
	case '/':
		result = f1 / f2
	default:
		result = f1 + f2
	}

	return result
}

// sumAndSub 返回多个结果
func sumAndSub(f1 float32, f2 float32, operator byte) (float32, float32) {
	sum := f1 + f2
	sub := f1 - f2
	return sum, sub
}
